package com.ruoyi.flowable.listener;

import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.zgl.youshuda.core.service.procservice.InterDealProcService;
import lombok.extern.slf4j.Slf4j;
import org.flowable.common.engine.impl.el.FixedValue;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
 * 调用优树搭程序执行监听器
 */
@Slf4j
@Component
public class YsdTaskListener implements TaskListener {
    /**
     * 优树搭API标识
     */
    private FixedValue ysdProcTarget;
    /**
     * 请求参数
     */
    private FixedValue ysdProcParams;

    @Override
    public void notify(DelegateTask delegateTask) {
        log.debug("任务监听器:{}", delegateTask);
        /**
         * 请求参数处理
         */
        Map<String, Object> reqParams = new HashMap<>();
        if(ysdProcParams!=null){
            ArrayList<Map<String,Object>> reqParam = JSONObject.parseObject(ysdProcParams.getExpressionText(), ArrayList.class);
            //组合优树搭接口的参数
            for (Map<String, Object> param : reqParam) {
                if("expression".equals(param.get("type"))){
                    reqParams.put(param.get("name").toString(),delegateTask.getVariable(param.get("value").toString()));
                }else{
                    reqParams.put(param.get("name").toString(),param.get("value").toString());
                }
            }
        }
        //流程实例ID
        reqParams.put("processInstanceId",delegateTask.getProcessInstanceId());
        /**
         * 调用优树搭
         */
        SpringUtils.getBean(InterDealProcService.class).dealProc(ysdProcTarget.getExpressionText(),reqParams);
    }
}
